#ifndef _SYS_ARG_ERR_H_
#define _SYS_ARG_ERR_H_

#include "Err.h"
#include "SysTypes.h"

#define ARG_ERR_VTABLE(self)   ((ArgErrVTable*)((FanObj*)self)->vtable)


extern Type*    ArgErr_classType;
extern VTable*  ArgErr_classVTable;


/* [sys::ArgErr] Attributes */
struct ArgErr
{
  Err           super;
};


/* [sys::ArgErr] Virtual-table */
typedef struct ArgErrVTable
{
  ErrVTable     super;
} ArgErrVTable;


/* [sys::ArgErr] Methods and fields */
void            ArgErr_make_0(ArgErr* self);
void            ArgErr_make_1(ArgErr* self, Str* msg);
void            ArgErr_make(ArgErr* self, Str* msg, Err* cause);


/* [sys::ParseErr] Extra methods */
ArgErr*         ArgErr_new(Str* msg, Err* cause);
ArgErr*         ArgErr_newWithFormattedMsg(const char* msgFormat, ...);


/* [sys::ArgErr] Type-system functions */
Type*           ArgErr_initType(void);
VTable*         ArgErr_initVTable(void);
void            ArgErr_initStatic(void);


#endif
